/*
 * Copyright (C) 2012 POAS.VSTU
 */

package model;

import sun.reflect.generics.reflectiveObjects.NotImplementedException;

import java.util.ArrayList;
import java.util.List;

/**
 * Отбой
 */
public class CardPileRecycle extends CardPile {
    
    /**  Конструктор по-умолчанию. */
    public CardPileRecycle() { 
    }

    /**
     * Возвращает ранг карт, находящихся в отбое.
     * @return ранг карт отбоя
     */
    public List<Face> getFaces() {
        List<Face> faces = new ArrayList<>();

        for (Card card : mCards) {
            Face cardFace = card.getFace();
            if (!faces.contains(cardFace)) faces.add(cardFace);
        }
        
        return faces;
    }

    /**
     * Помещает 4 карты одного ранга в отбой.
     * @param cards карты, помещаемые в отбой
     */
    @Override
    public void push(List<Card> cards) {
        if (cards == null) {
            throw new NullPointerException("cards");
        }

        if (cards.size() != 4) {
            throw new IllegalArgumentException("cards");
        }
        
        Face face = cards.get(0).getFace();
        for (int i = 1; i < cards.size(); i++) {
            if (cards.get(i).getFace() != face) {
                throw new IllegalArgumentException("Cards not the same rank");
            }
        }

        // todo create check for the different Suit

        mCards.addAll(cards);
    }
    
    /** Определяет наличие в отбое карт заданного ранга. */
    public boolean contains(Face face) {
        return this.getFaces().contains(face);
    }
}